﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class alumno_alta : System.Web.UI.Page
{
    string cadenaError = "";

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if ((Academia.Entidades.Usuario.RolUsuario)Session["rol"] !=
                    Academia.Entidades.Usuario.RolUsuario.Administrador)
            {
                Page.Response.Redirect("MenuAlumno.aspx");
            }
        }

        catch
        {
            Page.Response.Redirect("Login.aspx");
        }

        if (!Page.IsPostBack)
        {
            ddlEstado.DataSource = Enum.GetValues(typeof(Academia.Entidades.Alumno.EstadoAlumno));
            ddlEstado.DataBind();

            ddlTipoDocumento.Items.Insert(0, new ListItem("DNI", "DNI"));
            ddlTipoDocumento.Items.Insert(1, new ListItem("LC", "LC"));
            ddlTipoDocumento.Items.Insert(2, new ListItem("LE", "LE"));
            ddlTipoDocumento.Items.Insert(3, new ListItem("CI", "LE"));
            ddlTipoDocumento.Items.Insert(4, new ListItem("Pasaporte", "Pasaporte"));

            cargarDiasCalendario();

            if (Request.QueryString["legajo"] != null)
            {
                this.panelContrasenia.Visible = false;
                this.lblTitulo.Text = "Modificar Alumno";
                this.btnGuardar.Text = "Modificar";
                cargarDatosUsuario(int.Parse(Request.QueryString["legajo"]));
            }
        }
    }

    private void cargarDatosUsuario(int idUsuario)
    {
        Academia.Negocio.Alumnos oNegocio = new Academia.Negocio.Alumnos();
        Academia.Entidades.Alumno oAlumno = oNegocio.RecuperarUno(idUsuario)[0];
        this.txtAñoNacimiento.Text = Convert.ToDateTime(oAlumno.FechaNacimiento).Year.ToString();
        this.txtApellido.Text = oAlumno.Apellido;
        this.txtCelular.Text = oAlumno.TelefonoCelular;
        this.txtDireccion.Text = oAlumno.Direccion;
        this.txtEmail.Text = oAlumno.Email;
        this.txtNombre.Text = oAlumno.Nombre;
        this.txtNroDocumento.Text = oAlumno.NroDoc.ToString();
        this.txtTelefono.Text = oAlumno.TelefonoFijo;
        this.ddlTipoDocumento.SelectedValue = oAlumno.TipoDoc;
        this.ddlDiaFechaNacimiento.SelectedIndex = Convert.ToDateTime(oAlumno.FechaNacimiento).Day - 1;
        this.ddlMesFechaNacimiento.SelectedIndex = Convert.ToDateTime(oAlumno.FechaNacimiento).Month - 1;
        this.txtAñoInicio.Text = oAlumno.AnioInicio.ToString();
        this.ddlEspecialidad.SelectedValue = oAlumno.plan.IdPlan.ToString();
        this.ddlEstado.SelectedValue = oAlumno.Estado.ToString();
        oAlumno = null;
    }

    private void cargarDiasCalendario()
    {
        //Cargar en el combo los items correspondientes a los días
        //(del 1 al 31)
        for (int i = 1; i <= 31; i++)
        {
            if (i < 10)
            {
                this.ddlDiaFechaNacimiento.Items.Add("0" + i.ToString());
            }
            else
            {
                this.ddlDiaFechaNacimiento.Items.Add(i.ToString());
            }
        }
    }

    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        if (alumnoValido())
        {
            Academia.Entidades.Alumno oAlumno = new Academia.Entidades.Alumno();
            oAlumno.Apellido = this.txtApellido.Text;
            oAlumno.TelefonoCelular = this.txtCelular.Text;
            oAlumno.Direccion = this.txtDireccion.Text;
            oAlumno.Email = this.txtEmail.Text;
            oAlumno.FechaNacimiento = new DateTime(int.Parse(this.txtAñoNacimiento.Text),
                                             this.ddlMesFechaNacimiento.SelectedIndex + 1,
                                             this.ddlDiaFechaNacimiento.SelectedIndex + 1);
            oAlumno.Nombre = this.txtNombre.Text;
            oAlumno.NroDoc = int.Parse(this.txtNroDocumento.Text);
            oAlumno.TelefonoFijo = this.txtTelefono.Text;
            oAlumno.TipoDoc = this.ddlTipoDocumento.SelectedValue;
            oAlumno.AnioInicio = int.Parse(this.txtAñoInicio.Text);
            oAlumno.plan = new Academia.Negocio.Planes().RecuperarUno(int.Parse(this.ddlEspecialidad.SelectedValue))[0];
            //Magia para obtener el valor del enumerador a partir de un string
            oAlumno.Estado = (Academia.Entidades.Alumno.EstadoAlumno)Enum.Parse(
                              typeof(Academia.Entidades.Alumno.EstadoAlumno), this.ddlEstado.SelectedValue, true);
            if (Request.QueryString["legajo"] == null)
            {
                oAlumno.usuario = new Academia.Entidades.Usuario();
                oAlumno.usuario.NombreUsuario = txtNomUsuario.Text;
                oAlumno.usuario.Password = txtContraseña.Text;
                oAlumno.usuario.Rol = Academia.Entidades.Usuario.RolUsuario.Usuario;

                new Academia.Negocio.Alumnos().Agregar(oAlumno);
            }
            else
            {
                oAlumno.Legajo = int.Parse(Request.QueryString["legajo"]);
                new Academia.Negocio.Alumnos().Modificar(oAlumno);
            }
            oAlumno = null;

            Page.Response.Redirect("abm_alumnos.aspx?exito=1");

        }
        else
        {
            HtmlGenericControl body = this.Master.FindControl("bodytag") as HtmlGenericControl;
            body.Attributes.Add("onLoad", "alert('" + this.cadenaError + "');");

        }

    }

    private bool alumnoValido()
    {
        bool valido = true;

        if (!Academia.Utilidades.Validaciones.validarAlfabetico(this.txtApellido.Text))
        {
            valido = false;
            this.txtApellido.BackColor = System.Drawing.Color.Red;
            cadenaError = cadenaError + "El apellido ingresado no es alfabético" + "\\n";
        }
        else
        {
            this.txtApellido.BackColor = System.Drawing.Color.White;
        }

        if (!Academia.Utilidades.Validaciones.validarAlfabetico(this.txtNombre.Text))
        {
            valido = false;
            this.txtNombre.BackColor = System.Drawing.Color.Red;
            cadenaError = cadenaError + "El nombre ingresado no es alfabético" + "\\n";
        }

        else
        {
            this.txtNombre.BackColor = System.Drawing.Color.White;
        }


        if (!Academia.Utilidades.Validaciones.validarDNI(this.txtNroDocumento.Text))
        {
            valido = false;
            this.txtNroDocumento.BackColor = System.Drawing.Color.Red;
            cadenaError = cadenaError + "El DNI ingresado tiene formato incorrecto" + "\\n";
        }

        else
        {
            this.txtNroDocumento.BackColor = System.Drawing.Color.White;
        }

        if (!Academia.Utilidades.Validaciones.validarAño(this.txtAñoNacimiento.Text))
        {
            valido = false;
            this.txtAñoNacimiento.BackColor = System.Drawing.Color.Red;
            cadenaError = cadenaError + "El año de nacimiento ingresado está fuera del rango permitido" + "\\n";
        }
        else
        {
            this.txtAñoNacimiento.BackColor = System.Drawing.Color.White;
        }


        if (this.txtDireccion.Text == "")
        {
            valido = false;
            this.txtDireccion.BackColor = System.Drawing.Color.Red;
            cadenaError = cadenaError + "El campo dirección no puede estar vacío" + "\\n";
        }

        else
        {
            this.txtDireccion.BackColor = System.Drawing.Color.White;
        }


        if (this.txtTelefono.Text == "")
        {
            valido = false;
            this.txtTelefono.BackColor = System.Drawing.Color.Red;
            cadenaError = cadenaError + "El campo teléfono no puede estar vacío" + "\\n";
        }
        else
        {
            this.txtTelefono.BackColor = System.Drawing.Color.White;
        }


        if (!Academia.Utilidades.Validaciones.validarEmail(this.txtEmail.Text))
        {
            valido = false;
            this.txtEmail.BackColor = System.Drawing.Color.Red;
            cadenaError = cadenaError + "El e-mail ingresado tiene formato incorrecto" + "\\n";
        }
        else
        {
            this.txtEmail.BackColor = System.Drawing.Color.White;
        }

        if (!Academia.Utilidades.Validaciones.validarAño(this.txtAñoInicio.Text))
        {
            valido = false;
            this.txtAñoInicio.BackColor = System.Drawing.Color.Red;
            cadenaError = cadenaError + "El año de inicio ingresado está fuera del rango permitido" + "\\n";
        }
        else
        {
            this.txtAñoInicio.BackColor = System.Drawing.Color.White;
        }

        if (Request.QueryString["legajo"] == null)
        {
            valido = validarContrasenia(valido);

            Academia.Negocio.Usuarios oNegocio = new Academia.Negocio.Usuarios();

            try
            {
                Academia.Entidades.Usuarios oUsuarios = oNegocio.UsuariosRecuperarUno(txtNomUsuario.Text);
                if ((oUsuarios.Count != 0) || (this.txtNomUsuario.Text == ""))
                {
                    valido = false;
                    this.txtNomUsuario.BackColor = System.Drawing.Color.Red;
                    if (this.txtNomUsuario.Text == "")
                    {
                        cadenaError = cadenaError + "El campo nombre de usuario no puede estar vacío" + "\\n";
                    }
                    else
                    {
                        cadenaError = cadenaError + "El nombre de usuario ingresado ya está siendo utilizado" + "\\n";
                    }
                }
                else
                {
                    this.txtNomUsuario.BackColor = System.Drawing.Color.White;
                }

                oUsuarios = null;
            }
            catch
            {
                valido = false;
                this.txtNomUsuario.BackColor = System.Drawing.Color.Red;
            }
            finally
            {

                oNegocio = null;
            }
        }

        try {
            valido = Academia.Utilidades.Validaciones.validarFecha(int.Parse(this.txtAñoNacimiento.Text),
            this.ddlMesFechaNacimiento.SelectedIndex + 1, this.ddlDiaFechaNacimiento.SelectedIndex + 1);
        } catch {
            valido = false;
        }

        if(valido)
        {
            this.ddlDiaFechaNacimiento.BackColor = System.Drawing.Color.White;
            this.ddlMesFechaNacimiento.BackColor = System.Drawing.Color.White;
        }
        else
        {
            this.ddlDiaFechaNacimiento.BackColor = System.Drawing.Color.Red;
            this.ddlMesFechaNacimiento.BackColor = System.Drawing.Color.Red;
            cadenaError = cadenaError + "La fecha de nacimiento ingresada tiene formato inválido" + "\\n";
        }
        return valido;
    }

    private bool validarContrasenia(bool valido)
    {
        if ((this.txtContraseña.Text != this.txtRepetirContraseña.Text) ||
            (this.txtContraseña.Text.Length < 5))
        {
            valido = false;
            this.txtContraseña.BackColor = System.Drawing.Color.Red;
            this.txtRepetirContraseña.BackColor = System.Drawing.Color.Red;
            if (this.txtContraseña.Text != this.txtRepetirContraseña.Text)
            {
                cadenaError = cadenaError + "Las contraseñas ingresadas no coinciden" + "\\n";
            }
            else
            {
                cadenaError = cadenaError + "La contraseña ingresada no posee la longitud adecuada" + "\\n";
            }
        }
        else
        {
            this.txtContraseña.BackColor = System.Drawing.Color.White;
            this.txtRepetirContraseña.BackColor = System.Drawing.Color.White;
        }
        return valido;
    }

    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        Page.Response.Redirect("abm_alumnos.aspx");
    }
}
